package com.google.code.xconf.schema;

public class SchemaSettings {

    private String name;
    private String version;
    private String author;
    private String location;

    private boolean propertyIdentifierCaseSensitive = true;
    private boolean propertyOptional = true;
    private boolean propertiesStrictOrdering = false;
    private boolean propertyValueCaseSensitive = true;

    private boolean sameNamedPropertiesAllowed = true;
    private boolean sameNamedGroupsAllowed = true;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public boolean isPropertyIdentifierCaseSensitive() {
        return propertyIdentifierCaseSensitive;
    }

    public void setPropertyIdentifierCaseSensitive(boolean propertyIdentifierCaseSensitive) {
        this.propertyIdentifierCaseSensitive = propertyIdentifierCaseSensitive;
    }

    public boolean isPropertyOptional() {
        return propertyOptional;
    }

    public void setPropertyOptional(boolean propertyOptional) {
        this.propertyOptional = propertyOptional;
    }

    public boolean isPropertiesStrictOrdering() {
        return propertiesStrictOrdering;
    }

    public void setPropertiesStrictOrdering(boolean propertiesStrictOrdering) {
        this.propertiesStrictOrdering = propertiesStrictOrdering;
    }

    public boolean isPropertyValueCaseSensitive() {
        return propertyValueCaseSensitive;
    }

    public void setPropertyValueCaseSensitive(boolean propertyValueCaseSensitive) {
        this.propertyValueCaseSensitive = propertyValueCaseSensitive;
    }

    public boolean isSameNamedGroupsAllowed() {
        return sameNamedGroupsAllowed;
    }

    public void setSameNamedGroupsAllowed(boolean sameNamedGroupsAllowed) {
        this.sameNamedGroupsAllowed = sameNamedGroupsAllowed;
    }

    public boolean isSameNamedPropertiesAllowed() {
        return sameNamedPropertiesAllowed;
    }

    public void setSameNamedPropertiesAllowed(boolean sameNamedPropertiesAllowed) {
        this.sameNamedPropertiesAllowed = sameNamedPropertiesAllowed;
    }

    public SchemaSettings snapshot() {
        SchemaSettings result = new SchemaSettings();
        result.setPropertyIdentifierCaseSensitive(propertyIdentifierCaseSensitive);
        result.setPropertyOptional(propertyOptional);
        result.setPropertiesStrictOrdering(propertiesStrictOrdering);
        result.setPropertyValueCaseSensitive(propertyValueCaseSensitive);
        result.setSameNamedPropertiesAllowed(sameNamedPropertiesAllowed);
        result.setSameNamedGroupsAllowed(sameNamedGroupsAllowed);
        return result;
    }
}
